<?php

namespace app\checkin\controller;

use app\checkin\model\Store as StoreModel;
use think\admin\helper\QueryHelper;

/**
 * 门店信息管理
 * @class Store
 * @package app\checkin\controller
 */
class Store extends Base
{
    /**
     * 门店列表
     * @auth true
     * @menu true
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\DbException
     * @throws \think\db\exception\ModelNotFoundException
     */
    public function index()
    {
        $this->title = '门店信息管理';
        StoreModel::mQuery()->layTable(function () {
            $this->assign('statusMap', StoreModel::$statusMap);
        }, function (QueryHelper $query) {
            // 搜索条件
            $query->like('name,code,phone')->equal('status')->dateBetween('create_time');
            
            // 数据权限过滤
            // 总账号可以看所有门店，分账号只能看自己的门店
            if (!$this->isMaster) {
                $query->where(['id' => $this->storeId]);
            }
        });
    }
    
    /**
     * 添加门店
     * @auth true
     */
    public function add()
    {
        $this->title = '添加门店';
        $this->_applyFormToken();
        StoreModel::mForm('form');
    }
    
    /**
     * 编辑门店
     * @auth true
     */
    public function edit()
    {
        $this->title = '编辑门店';
        $this->_applyFormToken();
        StoreModel::mForm('form');
    }
    
    /**
     * 表单数据处理
     * @param array $data
     */
    protected function _form_filter(array &$data)
    {
        if ($this->request->isGet()) {
            // 获取表单时的处理
            $this->assign('statusMap', StoreModel::$statusMap);
        } else {
            // 提交表单时的处理
            // 检查门店编码是否重复
            if (!empty($data['code'])) {
                $map = ['code' => $data['code']];
                if (!empty($data['id'])) {
                    $map[] = ['id', '<>', $data['id']];
                }
                if (StoreModel::mk()->where($map)->count() > 0) {
                    $this->error('门店编码已存在，请使用其他编码！');
                }
            }
        }
    }
    
    /**
     * 表单结果处理
     * @param boolean $result
     */
    protected function _form_result(bool $result)
    {
        if ($result) {
            $this->success('门店保存成功！');
        }
    }
    
    /**
     * 修改门店状态
     * @auth true
     */
    public function state()
    {
        StoreModel::mSave($this->_vali([
            'status.in:0,1'  => '状态值范围异常！',
            'status.require' => '状态值不能为空！',
        ]));
    }
    
    /**
     * 删除门店
     * @auth true
     */
    public function remove()
    {
        // 检查是否有关联数据
        $id = $this->request->post('id');
        
        // 检查是否有会员注册在此门店
        $memberCount = \app\checkin\model\Member::mk()->where(['register_store_id' => $id])->count();
        if ($memberCount > 0) {
            $this->error("该门店下有 {$memberCount} 个会员，无法删除！");
        }
        
        // 检查是否有用户绑定此门店
        $userCount = \think\admin\model\SystemUser::mk()->where(['store_id' => $id])->count();
        if ($userCount > 0) {
            $this->error("该门店下有 {$userCount} 个用户账号，无法删除！");
        }
        
        StoreModel::mDelete();
    }
}

